package generic;

/**
 * 泛型
 */
public class Generic03 {

    public static void main(String[] args) {

        /*
            泛型的好处：
            1)编译时，检查添加元素的类型，提高了安全性
            2)减少了类型转换的次数，提高了效率
            3)不再提示编译警告
         */

        /*
            泛型：
            1)泛型又称参数化类型，是 jdk5.0出现的新特性，解决数据类型的安全性问题
            2)在类声明或实例化时只要指定好需要的具体类型即可
            3)Java泛型可以保证如果程序在编译时没有发出警告，运行时就不会产生类型转换异常
            4)泛型的作用：可以在类声明时通过一个标识表示类中某个属性的类型，或者是某个方法的返回值的类型，或者是参数类型
         */

        Person<String> person = new Person<>("lmy");
        person.show();  //String

        Person<Integer> person2 = new Person<Integer>(100);
        person2.show();//Integer
    }
}

class Person<E> {

    E s; //E 表示 s 的数据类型，该数据类型在定义 Person 对象的时候指定，即在编译期间，就确定E是什么类型

    public Person(E s) {    //E 也可以是参数类型
        this.s = s;
    }

    public E f() {  //返回类型使用E
        return s;
    }

    public void show() {
        System.out.println(s.getClass());   //显示s的运行类型
    }


}